package com.yehun.utils;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/**
 * Created by Genius on 2017/4/5 0005.
 */
public class DateUtils {

    public enum DateType {
        Year,
        Month,
        Date,
        Hour,
        Minute,
        Second,
        Millisecond,
        Week;
    }

    public class Fomat
    {
        /**
         * 格式:yyMM
         */
        public final static String YearMonth = "yyMM";

        /**
         * 格式:yyyy-MM-dd hh:mm:ss:SSS
         */
        public final static String Full = "yyyy-MM-dd hh:mm:ss:SSS";
        /**
         * 格式:yyyy-MM-dd hh:mm:ss
         */
        public final static String DateTime = "yyyy-MM-dd hh:mm:ss";
        /**
         * 格式:yyyy-MM-dd
         */
        public final static String Date = "yyyy-MM-dd";
        /**
         * 格式:hh:mm:ss
         */
        public final static String Time = "hh:mm:ss";
        /**
         * 格式:yyyy-MM-dd hh:mm
         */
        public final static String NoSecond = "yyyy-MM-dd hh:mm";
        /**
         * 格式:yyyyMMddhhmmss
         */
        public final static String NoSymbols = "yyyyMMddhhmmssSSS";
    }


    /**
     * 获取当前时间
     * @return Date
     */
    public static Date getNow() {
        return new Date();
    }


    /**
     * 获取当前时间的字符串格式
     * @param format  yyyy-MM-dd hh:mm:ss
     * @return String
     */
    public static String getNow(String format) {
        return getFormat(getNow(), format);
    }

    /**
     * 获取指定时间格式
     * @param format 时间格式
     * @return String
     */
    public static String getFormat(String format) {
        SimpleDateFormat sFormat = new SimpleDateFormat(format);
        return sFormat.format(new Date());
    }

    /**
     * 获取指定时间格式
     * @param date 时间字符串
     * @param format 时间格式
     * @return String
     */
    public static String getFormat(Date date, String format) {
        SimpleDateFormat sFormat = new SimpleDateFormat(format);
        return sFormat.format(date);
    }

    /**
     * 字符串转java.utils.Date
     * @param string 时间字符串
     * @return Date
     */
    public static Date getDate(String string, String format) {
        SimpleDateFormat sFormat = new SimpleDateFormat(format);
        Date date = null;
        try {
            date = sFormat.parse(string);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return date;
    }


    /**
     * 两个时间间隔的天数
     * @param begindate	开始时间
     * @param enddate		结束时间
     * @return int
     */
    public static int getDay(Date begindate, Date enddate) {
        return (int)((enddate.getTime() - begindate.getTime()) / (24 * 60 * 60 * 1000));
    }

    /**
     * 获取date -> number 天(type) 之前的时间
     * @param date 时间
     * @param type 类型 Calendar(年, 月, 日, 时, 分, 秒)
     * @param number 数量
     * @return Date
     */
    public static Date getDate(Date date, DateType type, int number) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        switch (type) {
            case Year:
                calendar.add(Calendar.YEAR, number);
                break;
            case Month:
                calendar.add(Calendar.MONTH, number);
                break;
            case Date:
                calendar.add(Calendar.DATE, number);
                break;
            case Hour:
                calendar.add(Calendar.HOUR, number);
                break;
            case Minute:
                calendar.add(Calendar.MINUTE, number);
                break;
            case Second:
                calendar.add(Calendar.SECOND, number);
                break;
            case Millisecond:
                calendar.add(Calendar.MILLISECOND, number);
                break;
        }
        return calendar.getTime();
    }

}
